/**
 * window.localStorage
 * @method set 设置
 * @method get 获取
 * @method remove 移除
 * @method clear 移除全部
 */
export const Local = {

	/**
	 * 入参val有以下几种情况：<br/>
	 * ① undefined：JSON.stringify()后变成'undefined'字符串<br/>
	 * ② null：JSON.stringify()后变成'null'字符串<br/>
	 * ③ 其他：JSON.stringify()后变成对应的json字符串<br/>
	 */
	set(key: string, val: any) {
		window.localStorage.setItem(key, JSON.stringify(val))
	},

	/**
	 * 方法中window.localStorage.getItem()返回的json有以下几种情况：<br/>
	 * ① null：表示localStorage中没有该key，则返回undefined<br/>
	 * ② 'undefined'：表示存的值为undefined，则返回undefined<br/>
	 * ③ 'null'：表示存的值为null，则返回null<br/>
	 * ④ json字符串：则调用JSON.parse()解析出原值<br/>
	 */
	get(key: string) {
		const json = window.localStorage.getItem(key)
		if (json === null || json === 'undefined') {
			return undefined
		}
		if (json === 'null') {
			return null
		}
		return JSON.parse(json)
	},

	remove(key: string) {
		window.localStorage.removeItem(key)
	},

	clear() {
		window.localStorage.clear()
	},

	size() {
		return window.localStorage.length
	},

	key(index: number) {
		return window.localStorage.key(index)
	}
}

/**
 * window.sessionStorage
 * @method set 设置会话缓存
 * @method get 获取会话缓存
 * @method remove 移除会话缓存
 * @method clear 移除全部会话缓存
 */
export const Session = {

	/**
	 * 入参val有以下几种情况：<br/>
	 * ① undefined：JSON.stringify()后变成'undefined'字符串<br/>
	 * ② null：JSON.stringify()后变成'null'字符串<br/>
	 * ③ 其他：JSON.stringify()后变成对应的json字符串<br/>
	 */
	set(key: string, val: any) {
		window.sessionStorage.setItem(key, JSON.stringify(val))
	},

	/**
	 * 方法中window.localStorage.getItem()返回的json有以下几种情况：<br/>
	 * ① null：表示localStorage中没有该key，则返回undefined<br/>
	 * ② 'undefined'：表示存的值为undefined，则返回undefined<br/>
	 * ③ 'null'：表示存的值为null，则返回null<br/>
	 * ④ json字符串：则调用JSON.parse()解析出原值<br/>
	 */
	get(key: string) {
		const json = window.sessionStorage.getItem(key)
		if (json === null || json === 'undefined') {
			return undefined
		}
		if (json === 'null') {
			return null
		}
		return JSON.parse(json)
	},

	remove(key: string) {
		window.sessionStorage.removeItem(key)
	},

	clear() {
		window.sessionStorage.clear()
	},

	size() {
		return window.sessionStorage.length
	},

	key(index: number) {
		return window.sessionStorage.key(index)
	}
}

export const clearSessionAndLocalStorage = () => {
	Session.clear()
	Local.clear()
}
